// 记录最多8条错误记录
// 合并错误记录：文件名 行数 同 计数累加
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

bool compare(pair<string, int> a, pair<string, int> b)
{
  return a.second > b.second;
}
int main()
{
  string input, file;
  vector<pair<string, int>> errors;
  while (getline(cin, input))
  {
    if (input.size() == 0)
      break;
    // 转义字符，字符的rfind
    // E:\V1R2\product\fpgadrive.c 1325
    unsigned int f = input.rfind('\\');
    // file=fpgadrive.c 1325
    file = input.substr(f + 1);
    // pair的运用，make pair入vector
    errors.push_back(make_pair(file, 1));
    // 去重
    for (int i = 0; i < (errors.size() - 1); i++)
    {
      // 每次入vector的一条新file,和之前的比较，若重复就pop_back()
      if (errors[i].first == file)
      {
        errors[i].second++;
        errors.pop_back();
        break;
      }
    }
  }

  // errors全部存储号，现在开始按照错误多少排序
  // stable_sort的作用：
  // 1.按照错误多的排前面
  // 2.错误等的，按照push_back()的顺序/相对顺序保持不变，这是和sort比的优势
  stable_sort(errors.begin(), errors.end(), compare);

  // 然后输出前面8条，且文件名字太多要删除
  int idx = 0;
  while (idx < 8 && errors.size())
  {
    string check = errors[idx].first;
    int t = check.find(' ');
    if (t > 16)
    {
      errors[idx].first.erase(0, t - 16); // 长度大于18前面的抹掉
    }
    cout << errors[idx].first << ' ' << errors[idx].second << endl;
    idx++;
  }

  return 0;
}
